package org.needcoke.hs.http;

import java.util.Map;

/**
 * 标准请求
 *
 * @author warren
 */
public interface Request {

    Character QES = '?';

    Character AND = '&';

    Character EQ = '=';

    /**
     * IP/域名
     */
    String getHost();

    /**
     * 完整请求路径
     */
    String getUrl();

    /**
     * http path
     * <p>
     * 例如:/api/user/get/1
     */
    String getPath();

    /**
     * 端口号
     */
    int getPort();

    /**
     * url 前缀
     * <p>
     * 协议+host+端口
     */
    String getUrlPrefix();

    /**
     * 协议
     */
    String agreement();

    /**
     * 重定义url前缀
     */
    void setUrlPrefix(String urlPrefix);

    /**
     * 重定义url
     */
    void setUrl(String url);

    /**
     * 重定义path
     */
    void setPath(String path);

    /**
     * 设置Ip/域名
     */
    void setHost(String host);

    /**
     * 设置端口号
     */
    void setPort(int port);

    /**
     * 是否https
     */
    boolean isHttps();

    /**
     * 获取header
     */
    Map<String, String> getHeader();

    /**
     * 添加header
     */
    void addHeader(String k, String v);

    /**
     * 添加url 参数
     */
    Map<String, String> getUrlParameter();

    /**
     * 设置content-type
     */
    ContentType getContentType();

    /**
     * 获取http类型
     */
    HttpType getHttpType();

    /**
     * 设置http类型
     */
    void setHttpType(HttpType httpType);

    /**
     * 获取body为表单类型的数据   ---- 文件类型不考虑
     */
    Map<String, String> getFormParameter();

    /**
     * json/xml
     */
    String getBody();

    /**
     * 重置body
     */
    void setBody(String body, ContentType contentType);

    /**
     * 添加url 参数
     */
    void addUrlParameter(String k, String v);

    /**
     * 添加url 参数
     */
    void addUrlParameter(Map<String, String> urlParameter);

    /**
     * 重置url参数
     */
    void rewriteUrlParameter(Map<String, String> urlParameter);

}
